rendernode: Write the whole node
authorBenjamin Otte <otte@redhat.com>
Sat, 11 Sep 2021 04:06:02 +0000 (06:06 +0200)
committerBenjamin Otte <otte@redhat.com>
Sat, 11 Sep 2021 20:28:40 +0000 (22:28 +0200)
It turns out g_output_stream_write_bytes() does not write the bytes.
It should be renamed to g_output_stream_write_some_of_the_bytes() maybe.

gsk/gskrendernodeimpl.c

index 4b85fa60c1b44a837864ea3a4eab47477c4aa632..fd2a9e5d4422136636f27faff0e96d0c85f36a54 100644 (file)
@@ -5674,7 +5674,7 @@ gsk_render_node_content_serializer_finish (GObject      *source,
   GOutputStream *stream = G_OUTPUT_STREAM (source);
   GError *error = NULL;
 
-  if (!g_output_stream_write_bytes_finish (stream, result, &error))
+  if (g_output_stream_splice_finish (stream, result, &error) < 0)
     gdk_content_serializer_return_error (serializer, error);
   else
     gdk_content_serializer_return_success (serializer);
@@ -5683,6 +5683,7 @@ gsk_render_node_content_serializer_finish (GObject      *source,
 static void
 gsk_render_node_content_serializer (GdkContentSerializer *serializer)
 {
+  GInputStream *input;
   const GValue *value;
   GskRenderNode *node;
   GBytes *bytes;
@@ -5690,13 +5691,16 @@ gsk_render_node_content_serializer (GdkContentSerializer *serializer)
   value = gdk_content_serializer_get_value (serializer);
   node = gsk_value_get_render_node (value);
   bytes = gsk_render_node_serialize (node);
-
-  g_output_stream_write_bytes_async (gdk_content_serializer_get_output_stream (serializer),
-                                     bytes,
-                                     gdk_content_serializer_get_priority (serializer),
-                                     gdk_content_serializer_get_cancellable (serializer),
-                                     gsk_render_node_content_serializer_finish,
-                                     serializer);
+  input = g_memory_input_stream_new_from_bytes (bytes);
+
+  g_output_stream_splice_async (gdk_content_serializer_get_output_stream (serializer),
+                                input,
+                                G_OUTPUT_STREAM_SPLICE_CLOSE_SOURCE,
+                                gdk_content_serializer_get_priority (serializer),
+                                gdk_content_serializer_get_cancellable (serializer),
+                                gsk_render_node_content_serializer_finish,
+                                serializer);
+  g_object_unref (input);
   g_bytes_unref (bytes);
 }